Comment atténuer une attaque DDoS sur votre site web avec Nginx
Introduction
Les attaques par déni de service distribué (DDoS) sont un défi majeur pour les administrateurs de serveurs web. Elles peuvent rendre votre site web inaccessible en saturant votre serveur avec un grand nombre de requêtes. Nginx, en tant que serveur web performant et flexible, peut être configuré pour atténuer ces attaques, en complément de la protection fournie par By-Hoster.
Protection DDoS avec By-Hoster
By-Hoster propose une protection DDoS gratuite pour certaines attaques ciblées, offrant ainsi une sécurité supplémentaire aux serveurs hébergés sur leurs infrastructures. En choisissant By-Hoster pour héberger votre serveur, vous bénéficiez d'une protection DDoS de base, mais pour des attaques plus complexes, il peut être nécessaire de mettre en place des configurations supplémentaires sur votre serveur.
Prérequis
- Nginx : Vous devez avoir Nginx installé sur votre serveur.
- Connaissances de base en Linux : Familiarité avec les commandes Linux de base et l'accès aux fichiers de configuration de Nginx.
- Serveur VPS ou dédié By-Hoster : Un serveur privé virtuel ou dédié fourni par By-Hoster.
- Protection DDoS By-Hoster : La protection DDoS incluse dans votre hébergement By-Hoster.
Limitations
Ce guide est destiné à aider les clients de By-Hoster à configurer Nginx pour atténuer certaines attaques DDoS, mais il n'est pas une solution complète pour toutes les formes d'attaque. Pour les attaques plus sophistiquées, la protection DDoS avancée de By-Hoster pourrait être nécessaire.
Avertissement
By-Hoster recommande de tester toutes les configurations en environnement de développement avant de les appliquer sur un serveur de production. Il est toujours conseillé de faire des sauvegardes avant toute modification.
Stratégies d'atténuation DDoS sur Nginx
1. Mettre à jour Nginx
Toujours utiliser la dernière version stable de Nginx pour bénéficier des dernières améliorations de sécurité. Exécutez la commande suivante pour mettre à jour votre système et Nginx :
sudo apt update
sudo apt upgrade nginx
2. Limiter les connexions
Le module limit_conn
permet de limiter le nombre de connexions simultanées par adresse IP pour éviter que des attaquants ne saturent le serveur.
Dans votre fichier nginx.conf
, ajoutez :
http {
limit_conn_zone $binary_remote_addr zone=conn_limit_per_ip:10m;
server {
limit_conn conn_limit_per_ip 10;
}
}
Cela limitera chaque adresse IP à un maximum de 10 connexions simultanées.
3. Limiter le taux de requêtes
Limitez le nombre de requêtes par seconde à partir d'une même adresse IP pour éviter une surcharge du serveur avec des requêtes rapides en boucle.
http {
limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=10r/s;
server {
limit_req zone=req_limit_per_ip burst=20;
}
}
Cela permettra de limiter à 10 requêtes par seconde avec un "burst" de 20 requêtes.
4. Gestion des listes blanches et noires des IP
Ajoutez une protection supplémentaire en autorisant uniquement certaines IP et en bloquant les autres.
server {
allow 192.168.1.0/24; # IP de confiance
deny all; # Bloque toutes les autres IP
}
5. Utiliser un pare-feu applicatif web (WAF)
Pour renforcer la sécurité, vous pouvez installer un WAF comme ModSecurity ou utiliser des services comme Cloudflare qui filtrent les requêtes avant qu'elles n'atteignent votre serveur.
6. Activer HTTPS
Activez HTTPS sur Nginx pour chiffrer les communications et empêcher les attaques de type homme du milieu (MITM). Utilisez Let's Encrypt pour obtenir un certificat SSL gratuit :
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d votre-domaine.com
7. Désactiver les modules inutiles
Pour limiter les risques, désactivez les modules Nginx inutiles afin de réduire la surface d'attaque.
./configure --without-http_autoindex_module --without-http_ssi_module
8. Optimiser la configuration de Nginx
Adaptez les paramètres de Nginx en fonction de votre matériel pour optimiser les performances et renforcer la résistance aux attaques.
worker_processes auto;
worker_connections 1024;
9. Surveillance et journalisation
Surveillez vos logs pour détecter toute activité suspecte. Utilisez des outils comme fail2ban pour automatiser la protection contre les attaques.
10. Utiliser des services de protection DDoS de By-Hoster
By-Hoster propose une protection DDoS de base, mais si vous êtes confronté à une attaque plus complexe, il est conseillé d'activer des options supplémentaires via leur interface de gestion de serveur ou de contacter leur support pour des solutions avancées.
11. Effectuer des sauvegardes régulières
Assurez-vous de sauvegarder fréquemment vos fichiers de configuration et vos données essentielles pour minimiser les impacts en cas d'attaque.
Exemple de configuration de protection DDoS pour Nginx
Voici un exemple de configuration à ajouter dans votre fichier nginx.conf
pour renforcer la sécurité :
http {
limit_conn_zone $binary_remote_addr zone=conn_limit_per_ip:10m;
limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=10r/s;
server {
listen 80;
server_name exemple.com;
limit_req zone=req_limit_per_ip burst=20;
limit_conn conn_limit_per_ip 20;
client_body_buffer_size 1k;
client_header_buffer_size 1k;
client_max_body_size 1k;
large_client_header_buffers 2 1k;
gzip on;
gzip_comp_level 5;
gzip_min_length 256;
gzip_proxied any;
gzip_vary on;
add_header X-Content-Type-Options "nosniff";
add_header X-XSS-Protection "1; mode=block";
add_header X-Frame-Options "SAMEORIGIN";
add_header Referrer-Policy "same-origin";
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
if ($http_user_agent ~* (wget|curl) ) {
return 403;
}
location ~ /\. {
deny all;
}
location ~* \.(engine|inc|info|install|make|module|profile|test|po|sh|.*sql|theme|tpl(\.php)?|xtmpl)$|^(\..*|Entries.*|Repository|Root|Tag|Template)$|^#.*#$|\.php_ {
deny all;
return 403;
}
location /admin {
allow votre_ip_admin;
deny all;
}
location ~ /(system|vendor) {
deny all;
return 403;
}
location / {
proxy_pass http://votre_serveur_backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
}
Explications :
- Limitation du taux et des connexions : Limite les requêtes et les connexions simultanées par adresse IP.
- Compression Gzip : Active la compression pour économiser de la bande passante.
- Sécurisation via des en-têtes : Renforce la sécurité en empêchant certains types d'attaques.
- Blocage des User-Agents vulnérables : Empêche l'accès aux outils d'attaque connus comme
wget
etcurl
. - Restriction des fichiers sensibles : Bloque l'accès aux fichiers cachés et aux répertoires sensibles.
Comment intégrer cette configuration dans Nginx
-
Localisez le fichier
nginx.conf
: Selon votre distribution, il se trouve généralement à/etc/nginx/nginx.conf
ou/usr/local/nginx/conf/nginx.conf
. -
Ouvrez le fichier avec un éditeur : Utilisez
nano
,vim
, ou un autre éditeur pour ouvrir le fichier. -
Ajoutez la configuration : Insérez la configuration fournie dans le bloc
http
. -
Vérifiez la configuration : Testez la configuration avec la commande :
nginx -t
-
Redémarrez Nginx : Appliquez les changements en redémarrant Nginx avec :
sudo systemctl restart nginx
Conclusion
En suivant ces étapes et en appliquant les configurations proposées, vous renforcerez la sécurité de votresite web contre les attaques DDoS, tout en bénéficiant de la protection de base fournie par By-Hoster. Pour des attaques DDoS plus sophistiquées, il est recommandé de contacter le support de By-Hoster pour explorer les options de protection avancée.